Καταρχήν, δεν είναι πολύ ευγενικό να κάνεις 3 φορές το ίδιο post σε διαφορετικές κατηγορίες. Όχι μόνο δεν αυξάνονται οι πιθανότητες να πάρεις απάντηση, αντιθέτως μειώνονται επειδή ενοχλείς τα υπόλοιπα μέλη.
Όσον αφορά την ίδια την ερώτηση, δεν έχεις δώσει σχεδόν καθόλου στοιχεία. Τί εννοείς "έχω δημιουργήσει ένα Process"? Αναφέρεσαι στην κλάση
Process ή σε κάτι άλλο? Πως προσπαθείς να κάνεις restart τα Windows? Η Process δεν έχει καμμία μέθοδο για να κάνει κάτι τέτοιο. Τί πάει να πει "χωρίς σφάλμα"? Έχεις βάλει κώδικα για error logging και δεν δούλεψε? Δεν έγραψε τίποτε?
Μήπως δοκίμασες να τρέξεις κανένα command line με την Process.Start και δεν κοιτάς τα αποτελέσματα? Ο,τιδήποτε γράφει ένα console application γράφεται είτε στο Standard Out είτε στο Error stream. Για να δεις αυτά τα αποτελέσματα στο .NET θα πρέπει να διαβάσεις τα περιεχόμενα των
StandardError και
StandardOutput streams.
Λες ότι διαπίστωσες διαφορετική συμπεριφορά στον IIS - καθόλου απίθανο, αυτονόητο θα έλεγα. Ένα site στον IIS τρέχει κάτω από account με περιορισμένα δικαιώματα, ενώ εσύ στο μηχάνημα σου έχεις το λιγότερο administrator δικαιώματα για να μπορείς να κάνεις debug. Η δυνατότητα να κάνεις restart είναι προφανώς μία λειτουργία η οποία απαιτεί πολύ υψηλά δικαιώματα. Για να δουλέψει τέτοιος κώδικας θα πρέπει να εκτελεστεί δίνοντας τα credentials κάποιου account το οποίο έχει δικαίωμα να κάνει restart στα μηχανήματα.
Όπως και να έχει, όλη η διαδικασία είναι ΠΟΛΥ προβληματική. Καταρχήν, τα ίδια τα Windows έχουν μηχανισμούς για remote management. Δεν υπάρχει κανένας λόγος να φτιάξεις τον δικό σου, ανοίγοντας κατά πάσα πιθανότητα τρύπες στην ασφάλεια των μηχανημάτων. Μπορείς να χρησιμοποιήσεις WMI ή το πιο πρόσφατο
WinRM για remote administration. Το Powershell επίσης επιτρέπει το remote administration αν και στην πραγματικότητα πατάει πάνω στο WinRM γι αυτό. Μπορείς να κάνεις restart απλά καλώντας την
Restart-Computer και δίνοντας τα κατάλληλα credentials.
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos